"""
配置文件读取工具
读取 config.ini 配置文件并提供访问接口
"""

import os
import configparser
from typing import List, Dict, Any


class ConfigManager:
    """配置管理器"""
    
    def __init__(self, config_file='config.ini'):
        """
        初始化配置管理器
        
        Args:
            config_file: 配置文件路径，默认为项目根目录下的 config.ini
        """
        # 获取项目根目录（backend的上两级目录）
        current_file = os.path.abspath(__file__)
        backend_utils_dir = os.path.dirname(current_file)  # backend/utils
        backend_dir = os.path.dirname(backend_utils_dir)    # backend
        project_root = os.path.dirname(backend_dir)         # project root
        self.config_path = os.path.join(project_root, config_file)
        
        # 创建配置解析器
        self.config = configparser.ConfigParser()
        
        # 读取配置文件
        self._load_config()
    
    def _load_config(self):
        """加载配置文件"""
        if not os.path.exists(self.config_path):
            raise FileNotFoundError(f"配置文件不存在: {self.config_path}")
        
        self.config.read(self.config_path, encoding='utf-8')
        print(f"✅ 配置文件加载成功: {self.config_path}")
    
    def get_email_config(self) -> Dict[str, Any]:
        """
        获取邮件配置
        
        Returns:
            dict: 包含发件人、收件人等邮件配置信息
        """
        email_section = self.config['Email']
        
        # 解析收件人列表（逗号分隔）
        recipients = [r.strip() for r in email_section.get('recipients', '').split(',') if r.strip()]
        # 解析抄送人列表（逗号分隔）
        cc_recipients = [r.strip() for r in email_section.get('cc_recipients', '').split(',') if r.strip()]
        
        return {
            'sender_email': email_section.get('sender_email', ''),
            'sender_password': email_section.get('sender_password', ''),
            'recipients': recipients,
            'cc_recipients': cc_recipients
        }
    
    def get_smtp_config(self) -> Dict[str, Any]:
        """
        获取SMTP服务器配置
        
        Returns:
            dict: 包含SMTP服务器地址和端口
        """
        smtp_section = self.config['SMTP']
        
        return {
            'smtp_server': smtp_section.get('smtp_server', 'smtp.sn.chinamobile.com'),
            'smtp_port': smtp_section.getint('smtp_port', 465)
        }
    
    def get_imap_config(self) -> Dict[str, Any]:
        """
        获取IMAP服务器配置
        
        Returns:
            dict: 包含IMAP服务器地址和端口
        """
        imap_section = self.config['IMAP']
        
        return {
            'imap_server': imap_section.get('imap_server', 'imap.sn.chinamobile.com'),
            'imap_port': imap_section.getint('imap_port', 993)
        }
    
    def get_all_config(self) -> Dict[str, Any]:
        """
        获取所有配置
        
        Returns:
            dict: 包含所有配置信息
        """
        return {
            'email': self.get_email_config(),
            'smtp': self.get_smtp_config(),
            'imap': self.get_imap_config()
        }


# 创建全局配置管理器实例
_config_manager = None

def get_config_manager() -> ConfigManager:
    """
    获取配置管理器实例（单例模式）
    
    Returns:
        ConfigManager: 配置管理器实例
    """
    global _config_manager
    if _config_manager is None:
        _config_manager = ConfigManager()
    return _config_manager


# 便捷函数
def get_email_config() -> Dict[str, Any]:
    """
    获取邮件配置
    
    Returns:
        dict: 邮件配置字典
    """
    return get_config_manager().get_email_config()


def get_smtp_config() -> Dict[str, Any]:
    """
    获取SMTP配置
    
    Returns:
        dict: SMTP配置字典
    """
    return get_config_manager().get_smtp_config()


def get_imap_config() -> Dict[str, Any]:
    """
    获取IMAP配置
    
    Returns:
        dict: IMAP配置字典
    """
    return get_config_manager().get_imap_config()
